package metier;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import DB.Request;
import bean.Apprenti;
import bean.Entreprise;

public class EntrepriseMetier {

	private static EntrepriseMetier singleton = new EntrepriseMetier();
	
	public static EntrepriseMetier getInstance(){
		return singleton;
	}
	
	public Entreprise save(Entreprise entreprise){
		
		if(entreprise != null){
			String query;
			if (entreprise.getId_entreprise() != null) {
				//UPDATE
				query = "UPDATE entreprise SET nom=?,adresse_rue1=?,adresse_rue2=?,adresse_ville=?,adresse_cp=?,telephone=?,email=?,description=?,responsable_rh=?,telephone_responsable_rh=?,service_daccueil=?,responsable_service=?,telephone_responsable_service=?,email_responsable_service=?,debut_contrat=?,fin_contrat=?,nom_ma=?,prenom_ma=?,qualification_ma=?,telephone_fix_ma=?,telephone_portable_ma=?,email_ma=?,telephone_direct_apprenti=?,email_apprenti=?,id_utilisateur=? WHERE id_entreprise="+entreprise.getId_entreprise();
			} else {
				//INSERT
				query = "INSERT INTO entreprise(nom,adresse_rue1,adresse_rue2,adresse_ville,adresse_cp,telephone,email,description,responsable_rh,telephone_responsable_rh,service_daccueil,responsable_service,telephone_responsable_service,email_responsable_service,debut_contrat,fin_contrat,nom_ma,prenom_ma,qualification_ma,telephone_fix_ma,telephone_portable_ma,email_ma,telephone_direct_apprenti,email_apprenti,id_utilisateur) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			}
			List<Object> param = new ArrayList<Object>();
			param.add(entreprise.getNom());
			param.add(entreprise.getAdresse_rue1());
			param.add(entreprise.getAdresse_rue2());
			param.add(entreprise.getAdresse_ville());
			param.add(entreprise.getAdresse_cp());
			param.add(entreprise.getTelephone());
			param.add(entreprise.getEmail());
			param.add(entreprise.getDescription());
			param.add(entreprise.getReponsable_rh());
			param.add(entreprise.getTelephone_responsable_rh());
			param.add(entreprise.getService_daccueil());
			param.add(entreprise.getResponsable_service());
			param.add(entreprise.getTelephone_responsable_service());
			param.add(entreprise.getEmail_responsable_service());
			param.add(entreprise.getDebut_contrat());
			param.add(entreprise.getFin_contrat());
			param.add(entreprise.getNom_ma());
			param.add(entreprise.getPrenom_ma());
			param.add(entreprise.getQualification_ma());
			param.add(entreprise.getTelephone_fix_ma());
			param.add(entreprise.getTelephone_portable_ma());
			param.add(entreprise.getEmail_ma());
			param.add(entreprise.getTelephone_direct_apprenti());
			param.add(entreprise.getEmail_apprenti());
			param.add(entreprise.getUtilisateur().getId_utilisateur());
			Request.getInstance().executeUpdate(query, param);
		}
		if (entreprise.getId_entreprise() != null) {
			return getById(entreprise.getId_entreprise());
		} else {
			return getById(getLastId());
		}
	}
	
	public void delete(Entreprise entreprise){
		String query = "DELETE FROM entreprise WHERE id_entreprise =" + entreprise.getId_entreprise();
		Request.getInstance().executeUpdate(query);
	}
	
	public Entreprise getById(Integer id){
		Entreprise entreprise = null;
		String query = "SELECT * FROM entreprise WHERE id_entreprise=" + id;
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				entreprise = new Entreprise(id, resultat.getString("nom"), resultat.getString("adresse_rue1"), resultat.getString("adresse_rue2"), resultat.getString("adresse_ville"), resultat.getString("adresse_cp"), resultat.getString("telephone"), resultat.getString("email"), resultat.getString("description"), resultat.getString("responsable_rh"), resultat.getString("telephone_responsable_rh"), resultat.getString("service_daccueil"), resultat.getString("responsable_service"), resultat.getString("telephone_responsable_service"), resultat.getString("email_responsable_service"), resultat.getDate("debut_contrat"), resultat.getDate("fin_contrat"), resultat.getString("nom_ma"), resultat.getString("prenom_ma"), resultat.getString("qualification_ma"), resultat.getString("telephone_fix_ma"), resultat.getString("telephone_portable_ma"), resultat.getString("email_ma"), resultat.getString("telephone_direct_apprenti"), resultat.getString("email_apprenti"), UtilisateurMetier.getInstance().getById(resultat.getInt("id_utilisateur")));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return entreprise;
	}
	public List<Entreprise> getByIdUtilisateur(int IdUtilisateur)
	{
		List<Entreprise> entreprise = new ArrayList<Entreprise>();
		String query = "SELECT * FROM entreprise WHERE id_utilisateur=" + IdUtilisateur + "";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try{
			while(resultat.next()){
				Entreprise entreprises = new Entreprise(resultat.getInt("id_entreprise"),resultat.getString("nom"), resultat.getString("adresse_rue1"), resultat.getString("adresse_rue2"), resultat.getString("adresse_ville"), resultat.getString("adresse_cp"), resultat.getString("telephone"), resultat.getString("email"), resultat.getString("description"), resultat.getString("responsable_rh"), resultat.getString("telephone_responsable_rh"), resultat.getString("service_daccueil"), resultat.getString("responsable_service"), resultat.getString("telephone_responsable_service"), resultat.getString("email_responsable_service"), resultat.getDate("debut_contrat"), resultat.getDate("fin_contrat"), resultat.getString("nom_ma"), resultat.getString("prenom_ma"), resultat.getString("qualification_ma"), resultat.getString("telephone_fix_ma"), resultat.getString("telephone_portable_ma"), resultat.getString("email_ma"), resultat.getString("telephone_direct_apprenti"), resultat.getString("email_apprenti"), UtilisateurMetier.getInstance().getById(resultat.getInt("id_utilisateur")));
				entreprise.add(entreprises);
			}
		}catch(SQLException e){
			e.printStackTrace();
		}
		return entreprise;
		}
	public List<Entreprise> getAll(){
		List<Entreprise> entreprises = new ArrayList<Entreprise>();
		String query = "SELECT * FROM entreprise WHERE id_entreprise";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				Entreprise entreprise = new Entreprise(resultat.getInt("id_entreprise"), resultat.getString("nom"), resultat.getString("adresse_rue1"), resultat.getString("adresse_rue2"), resultat.getString("adresse_ville"), resultat.getString("adresse_cp"), resultat.getString("telephone"), resultat.getString("email"), resultat.getString("description"), resultat.getString("responsable_rh"), resultat.getString("telephone_responsable_rh"), resultat.getString("service_daccueil"), resultat.getString("responsable_service"), resultat.getString("telephone_responsable_service"), resultat.getString("email_responsable_service"), resultat.getDate("debut_contrat"), resultat.getDate("fin_contrat"), resultat.getString("nom_ma"), resultat.getString("prenom_ma"), resultat.getString("qualification_ma"), resultat.getString("telephone_fix_ma"), resultat.getString("telephone_portable_ma"), resultat.getString("email_ma"), resultat.getString("telephone_direct_apprenti"), resultat.getString("email_apprenti"), UtilisateurMetier.getInstance().getById(resultat.getInt("id_utilisateur")));
				entreprises.add(entreprise);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return entreprises;
	}
	
	private Integer getLastId(){
		Integer result = null;
		String query = "SELECT max(id_entreprise) AS id_entreprise FROM entreprise";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				result = resultat.getInt("id_entreprise");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}
	
}
